近期想要好好地歸納與釐清一些基礎觀念,因此整理加分享的同步把東西整理放上來,有的部分可能比較基礎請見諒
當我們有了多個 Activity 的時候我們一定會開始想到,我們該如何從一個 activity 去啟動另外一個 activity,又或者我們要怎麼進行兩個 activity 間的資料通等等的問題,這時候最常見的方式就是使用我們今天的主角 Intent 。
Intent 常見也常用,但是也常常忘記它其實有著兩種模式(還是只有我一直忘記...= =),下方名稱網路上對他們的名稱有些需的差異,在這邊以 android doc 上名稱為主。
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
在建置 Intent 的時候有幾個常見且主要可以包含的資訊有:
setComponent()
、setClass()
、setClassName()
做設定。setAction()
進行設定,而常見的動作有 ACTION_VIEW
、ACTION_SEND
等等。ACTION_EDIT
則資料應該包含打算編輯的 URI。另外也可以根據目的進行設定,像是 setData()
、setType()
、甚至是 setDataAndType()
。CATEGORY_BROWSABLE
目標的 activity可以自己使用網頁瀏覽器啟動,已顯示連結所參照的資料。putExtra()
,例如放 int 的、放 string 的、放 byte 的,甚至還可以放 array 類型的額外資料,這些種類方法都續傳入兩個參數:索引鍵名稱 (key name) 與值 (value)。像是當我們建立 intent 使用 ACTION_SEND
來傳送電子郵件的時候,我們可以使用 EXTRA_EMAIL
來指定收件者,並使用 EXTRA_SUBJECT
來指定主旨明確意圖範例
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
這邊我的例子是在兩個 activity 間的互動,service相關使用可以參考 google doc 中的範例。
隱含意圖範例
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://google.com"));
startActivity(intent);
這邊這個例子是開啟網頁的使用,另外在 google doc 中的例子是發送電子郵件,也可以進行參考。
前面的例子有提到,可以去喚醒其他有支援我們請求的 activity 或是 app,那反之其實我們也可以在自己的 activity 中去加入相關的聲明,加入之後我們便可以在其他 activity 中去對這個請求的 intent 進行回應。
這邊附上如何加入相關聲明的例子:(在 AndroidMainfest.xml 中對你想要賦予聲明的 activity 加入相應的內容)
<activity android:name=".ThirdActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent-filter>
</activity>